<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://kadm.com.ua/XMLSchema/Grammar" xmlns:parser="http://kadm.com.ua/XMLSchema/Parser"
  xmlns:set="http://kadm.com.ua/XMLSchema/Set" xmlns:lax="http://kadm.com.ua/XMLSchema/Lax">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="text()"/>

  <xsl:template match="@*"/>

  <xsl:template match="/">
    <parser:sets>
      <xsl:apply-templates/>
    </parser:sets>
  </xsl:template>

  <xsl:template match="lax:literal">
    <set:single>
      <xsl:attribute name="parser:number">
        <xsl:value-of select="ancestor::terminal[1]/@parser:number"/>
      </xsl:attribute>
      <set:item set:type="char">
        <xsl:value-of select="substring(text(), 1, 2)"/>
      </set:item>
    </set:single>
  </xsl:template>

  <xsl:template match="lax:class">
    <set:union>
      <xsl:attribute name="parser:number">
        <xsl:value-of select="ancestor::terminal[1]/@parser:number"/>
      </xsl:attribute>
      <xsl:apply-templates/>
    </set:union>
  </xsl:template>

  <xsl:template match="lax:not-class">
    <set:not>
      <xsl:attribute name="parser:number">
        <xsl:value-of select="ancestor::terminal[1]/@parser:number"/>
      </xsl:attribute>
      <set:union>
        <xsl:apply-templates/>
      </set:union>
    </set:not>
  </xsl:template>

  <xsl:template match="lax:range">
    <set:range>
      <xsl:attribute name="parser:number">
        <xsl:value-of select="ancestor::terminal[1]/@parser:number"/>
      </xsl:attribute>
      <xsl:apply-templates mode="item"/>
    </set:range>
  </xsl:template>

  <xsl:template match="lax:char" mode="item">
    <set:item set:type="char">
      <xsl:value-of select="text()"/>
    </set:item>
  </xsl:template>

  <xsl:template match="lax:code" mode="item">
    <set:item set:type="dec">
      <xsl:value-of select="text()"/>
    </set:item>
  </xsl:template>

  <xsl:template match="lax:hex-code" mode="item">
    <set:item set:type="hex">
      <xsl:value-of select="text()"/>
    </set:item>
  </xsl:template>

  <xsl:template match="lax:hex-code | lax:code | lax:char">
    <set:single>
      <xsl:apply-templates select="." mode="item"/>
    </set:single>
  </xsl:template>
</xsl:stylesheet>
